home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / dev / src / Rkm_asm.lha / Assembly_Codes / OS_Sources / Libraries / Gadtools.s < prev    next >
Text File  |  1992-09-02  |  20KB  |  1,264 lines

  1.  
  2.     INCDIR    WORK:Include/
  3.  
  4.     INCLUDE    exec/exec_lib.i
  5.     INCLUDE    exec/memory.i
  6.     INCLUDE    exec/lists.i
  7.     INCLUDE    intuition/intuition_lib.i
  8.     INCLUDE    intuition/intuition.i
  9.     INCLUDE    graphics/graphics_lib.i
  10.     INCLUDE    graphics/text.i
  11.     INCLUDE dos/dos_lib.i
  12.     INCLUDE dos/dos.i
  13.     INCLUDE    workbench/icon_lib.i
  14.     INCLUDE    workbench/startup.i
  15.     INCLUDE    workbench/workbench.i
  16.     INCLUDE    libraries/gadtools_lib.i
  17.     INCLUDE    libraries/gadtools.i
  18.  
  19.     INCLUDE    misc/easystart.i
  20.  
  21. LIB_VER        EQU    39
  22. FILE_SIZE    EQU    100
  23. TRUE        EQU    -1
  24. FALSE        EQU    0
  25.  
  26.     move.l    4.w,a6
  27.  
  28.     moveq    #LIB_VER,d0
  29.     lea    dos_name(pc),a1
  30.     jsr    _LVOOpenLibrary(a6)
  31.     move.l    d0,_DOSBase
  32.     beq    quit
  33.  
  34.     moveq    #LIB_VER,d0
  35.     lea    int_name(pc),a1
  36.     jsr    _LVOOpenLibrary(a6)
  37.     move.l    d0,_IntuitionBase
  38.     beq    exit_closedos
  39.  
  40.     moveq    #LIB_VER,d0
  41.     lea    gfx_name(pc),a1
  42.     jsr    _LVOOpenLibrary(a6)
  43.     move.l    d0,_GfxBase
  44.     beq    exit_closeint
  45.  
  46.     moveq    #LIB_VER,d0
  47.     lea    gadtools_name(pc),a1
  48.     jsr    _LVOOpenLibrary(a6)
  49.     move.l    d0,_GadtoolsBase
  50.     beq    exit_closegfx
  51.  
  52.     moveq    #LIB_VER,d0
  53.     lea    utility_name(pc),a1
  54.     jsr    _LVOOpenLibrary(a6)
  55.     move.l    d0,_UtilityBase
  56.     beq    exit_closegadtools
  57.  
  58.     moveq    #LIB_VER,d0
  59.     lea    icon_name(pc),a1
  60.     jsr    _LVOOpenLibrary(a6)
  61.     move.l    d0,_IconBase
  62.     beq    exit_closeutility
  63.  
  64.     lea    list0(pc),a0
  65.     move.l    a0,(a0)                ; LH_HEAD(a0)
  66.     addq.l    #4,(a0)                ; LH_HEAD(a0)
  67.     clr.l    LH_TAIL(a0)
  68.     move.l    a0,LH_TAILPRED(a0)
  69.     move.b    #NT_UNKNOWN,LH_TYPE(a0)
  70.  
  71.     lea    node0(pc),a1
  72.     lea    nstg0(pc),a2
  73.     clr.l    (a1)                    ; LN_SUCC(a1)
  74.     clr.l    LN_PRED(a1)
  75.     move.b    #NT_UNKNOWN,LN_TYPE(a1)
  76.     move.b    #0,LN_PRI(a1)
  77.     move.l    a2,LN_NAME(a1)
  78.     jsr    _LVOAddTail(a6)
  79.  
  80.     lea    list0(pc),a0
  81.     lea    node1(pc),a1
  82.     lea    nstg1(pc),a2
  83.     clr.l    (a1)                    ; LN_SUCC(a1)
  84.     clr.l    LN_PRED(a1)
  85.     move.b    #NT_UNKNOWN,LN_TYPE(a1)
  86.     clr.b    LN_PRI(a1)
  87.     move.l    a2,LN_NAME(a1)
  88.     jsr    _LVOAddTail(a6)
  89.  
  90.     lea    list0(pc),a0
  91.     lea    node2(pc),a1
  92.     lea    nstg2(pc),a2
  93.     clr.l    (a1)                    ; LN_SUCC(a1)
  94.     clr.l    LN_PRED(a1)
  95.     move.b    #NT_UNKNOWN,LN_TYPE(a1)
  96.     clr.b    LN_PRI(a1)
  97.     move.l    a2,LN_NAME(a1)
  98.     jsr    _LVOAddTail(a6)
  99.  
  100.     lea    list1(pc),a0
  101.     move.l    a0,(a0)                    ; LH_HEAD(a0)
  102.     addq.l    #4,(a0)                    ; LH_HEAD(a0)
  103.     clr.l    LH_TAIL(a0)
  104.     move.l    a0,LH_TAILPRED(a0)
  105.     move.b    #NT_UNKNOWN,LH_TYPE(a0)
  106.  
  107.     lea    node3(pc),a1
  108.     lea    nstg3(pc),a2
  109.     clr.l    (a1)                    ; LN_SUCC(a1)
  110.     clr.l    LN_PRED(a1)
  111.     move.b    #NT_UNKNOWN,LN_TYPE(a1)
  112.     clr.b    LN_PRI(a1)
  113.     move.l    a2,LN_NAME(a1)
  114.     jsr    _LVOAddTail(a6)
  115.  
  116.     lea    list1(pc),a0
  117.     lea    node4(pc),a1
  118.     lea    nstg4(pc),a2
  119.     clr.l    (a1)                    ; LN_SUCC(a1)
  120.     clr.l    LN_PRED(a1)
  121.     move.b    #NT_UNKNOWN,LN_TYPE(a1)
  122.     clr.b    LN_PRI(a1)
  123.     move.l    a2,LN_NAME(a1)
  124.     jsr    _LVOAddTail(a6)
  125.  
  126.     lea    list1(pc),a0
  127.     lea    node5(pc),a1
  128.     lea    nstg5(pc),a2
  129.     clr.l    (a1)                    ; LN_SUCC(a1)
  130.     clr.l    LN_PRED(a1)
  131.     move.b    #NT_UNKNOWN,LN_TYPE(a1)
  132.     clr.b    LN_PRI(a1)
  133.     move.l    a2,LN_NAME(a1)
  134.     jsr    _LVOAddTail(a6)
  135.  
  136.     suba.l    a0,a0
  137.     move.l    _IntuitionBase(pc),a6
  138.     jsr    _LVOLockPubScreen(a6)
  139.     move.l    d0,scrnptr
  140.     move.l    d0,wndwscrn
  141.     beq    exit_closeicon
  142.  
  143.     move.l    scrnptr(pc),a0
  144.     suba.l    a1,a1
  145.     move.l    _GadtoolsBase(pc),a6
  146.     jsr    _LVOGetVisualInfoA(a6)
  147.     move.l    d0,visptr
  148.     move.l    d0,box0vis
  149.     beq    unlock_pubscreen
  150.  
  151.     move.l    d0,d5
  152.  
  153.     lea    menu0defs(pc),a0
  154.     lea    menu0tags(pc),a1
  155.     jsr    _LVOCreateMenusA(a6)
  156.     move.l    d0,menu0ptr
  157.     beq    free_visual
  158.  
  159.     move.l    d0,a0
  160.     move.l    visptr(pc),a1
  161.     lea    menu0tags(pc),a2
  162.     jsr    _LVOLayoutMenusA(a6)
  163.     tst.l    d0
  164.     beq    free_menustrip
  165.  
  166.     lea    gadlistptr(pc),a0
  167.     jsr    _LVOCreateContext(a6)
  168.     tst.l    d0
  169.     beq    free_menustrip
  170.  
  171.     move.l    d0,a0
  172.     moveq    #BUTTON_KIND,d0
  173.     lea    ngdefs0(pc),a1
  174.     move.l    d5,gng_VisualInfo(a1)
  175.     lea    ngtags0(pc),a2
  176.     jsr    _LVOCreateGadgetA(a6)
  177.     move.l    d0,ngptr0
  178.     beq    free_menustrip
  179.  
  180.     move.l    d0,a0
  181.     moveq    #STRING_KIND,d0
  182.     lea    ngdefs1(pc),a1
  183.     move.l    d5,gng_VisualInfo(a1)
  184.     lea    ngtags1(pc),a2
  185.     jsr    _LVOCreateGadgetA(a6)
  186.     move.l    d0,ngptr1
  187.     beq    free_gadgets
  188.  
  189.     move.l    d0,a0
  190.     moveq    #CHECKBOX_KIND,d0
  191.     lea    ngdefs2(pc),a1
  192.     move.l    d5,gng_VisualInfo(a1)
  193.     lea    ngtags2(pc),a2
  194.     jsr    _LVOCreateGadgetA(a6)
  195.     move.l    d0,ngptr2
  196.     beq    free_gadgets
  197.  
  198.     move.l    d0,a0
  199.     moveq    #CYCLE_KIND,d0
  200.     lea    ngdefs3(pc),a1
  201.     move.l    d5,gng_VisualInfo(a1)
  202.     lea    ngtags3(pc),a2
  203.     jsr    _LVOCreateGadgetA(a6)
  204.     move.l    d0,ngptr3
  205.     beq    free_gadgets
  206.  
  207.     move.l    d0,a0
  208.     moveq    #INTEGER_KIND,d0
  209.     lea    ngdefs4(pc),a1
  210.     move.l    d5,gng_VisualInfo(a1)
  211.     lea    ngtags4(pc),a2
  212.     jsr    _LVOCreateGadgetA(a6)
  213.     move.l    d0,ngptr4
  214.     beq    free_gadgets
  215.  
  216.     move.l    d0,a0
  217.     moveq    #MX_KIND,d0
  218.     lea    ngdefs5(pc),a1
  219.     move.l    d5,gng_VisualInfo(a1)
  220.     lea    ngtags5(pc),a2
  221.     jsr    _LVOCreateGadgetA(a6)
  222.     move.l    d0,ngptr5
  223.     beq    free_gadgets
  224.  
  225.     move.l    d0,a0
  226.     moveq    #SLIDER_KIND,d0
  227.     lea    ngdefs6(pc),a1
  228.     move.l    d5,gng_VisualInfo(a1)
  229.     lea    ngtags6(pc),a2
  230.     jsr    _LVOCreateGadgetA(a6)
  231.     move.l    d0,ngptr6
  232.     beq    free_gadgets
  233.  
  234.     move.l    d0,a0
  235.     moveq    #SCROLLER_KIND,d0
  236.     lea    ngdefs7(pc),a1
  237.     move.l    d5,gng_VisualInfo(a1)
  238.     lea    ngtags7(pc),a2
  239.     jsr    _LVOCreateGadgetA(a6)
  240.     move.l    d0,ngptr7
  241.     beq    free_gadgets
  242.  
  243.     move.l    d0,a0
  244.     moveq    #TEXT_KIND,d0
  245.     lea    ngdefs8(pc),a1
  246.     move.l    d5,gng_VisualInfo(a1)
  247.     lea    ngtags8(pc),a2
  248.     jsr    _LVOCreateGadgetA(a6)
  249.     move.l    d0,ngptr8
  250.     beq    free_gadgets
  251.  
  252.     move.l    d0,a0
  253.     moveq    #NUMBER_KIND,d0
  254.     lea    ngdefs9(pc),a1
  255.     move.l    d5,gng_VisualInfo(a1)
  256.     lea    ngtags9(pc),a2
  257.     jsr    _LVOCreateGadgetA(a6)
  258.     move.l    d0,ngptr9
  259.     beq    free_gadgets
  260.  
  261.     move.l    d0,a0
  262.     moveq    #PALETTE_KIND,d0
  263.     lea    ngdefs10(pc),a1
  264.     move.l    d5,gng_VisualInfo(a1)
  265.     lea    ngtags10(pc),a2
  266.     jsr    _LVOCreateGadgetA(a6)
  267.     move.l    d0,ngptr10
  268.     beq    free_gadgets
  269.  
  270.     move.l    d0,a0
  271.     moveq    #LISTVIEW_KIND,d0
  272.     lea    ngdefs11(pc),a1
  273.     move.l    d5,gng_VisualInfo(a1)
  274.     lea    ngtags11(pc),a2
  275.     jsr    _LVOCreateGadgetA(a6)
  276.     move.l    d0,ngptr11
  277.     beq    free_gadgets
  278.  
  279.     move.l    d0,a0
  280.     moveq    #LISTVIEW_KIND,d0
  281.     lea    ngdefs12(pc),a1
  282.     move.l    d5,gng_VisualInfo(a1)
  283.     lea    ngtags12(pc),a2
  284.     jsr    _LVOCreateGadgetA(a6)
  285.     move.l    d0,ngptr12
  286.     beq    free_gadgets
  287.  
  288.     bsr    unlock_ps
  289.     move.b    #1,scrlock
  290.  
  291.     suba.l    a0,a0
  292.     lea    wndwtags(pc),a1
  293.     move.l    _IntuitionBase(pc),a6
  294.     jsr    _LVOOpenWindowTagList(a6)
  295.     move.l    d0,wndwptr
  296.     beq    free_gadgets
  297.  
  298.     move.l    d0,a0
  299.     move.l    wd_RPort(a0),wndwrp
  300.  
  301.     move.l    wndwptr(pc),a0
  302.     move.l    menu0ptr(pc),a1
  303.     jsr    _LVOSetMenuStrip(a6)
  304.     tst.l    d0
  305.     beq    close_window
  306.  
  307.     move.l    wndwrp(pc),a0
  308.     moveq    #10,d0
  309.     moveq    #16,d1
  310.     move.l    #608,d2
  311.     move.l    #230,d3
  312.     lea    box0tags(pc),a1
  313.     CALLGADTOOLS    DrawBevelBoxA
  314.  
  315.     CALLGRAF    WaitTOF
  316.  
  317.     move.l    wndwptr(pc),a0
  318.     suba.l    a1,a1
  319.     CALLGADTOOLS    GT_RefreshWindow
  320.  
  321.     lea    npmem(pc),a5
  322.  
  323. mainloop
  324.     move.l    wndwptr(pc),a0
  325.     move.l    wd_UserPort(a0),a0
  326.     CALLEXEC    WaitPort
  327.     move.l    wndwptr(pc),a0
  328.     move.l    wd_UserPort(a0),a0
  329.     CALLGADTOOLS    GT_GetIMsg
  330.     move.l    d0,a1
  331.     move.l    im_Class(a1),iclass
  332.     move.w    im_Code(a1),icode
  333.     move.w    im_Qualifier(a1),iqual
  334.     move.l    im_IAddress(a1),iadr
  335.     move.w    im_MouseX(a1),msex
  336.     move.w    im_MouseY(a1),msey
  337.     CALLGADTOOLS    GT_ReplyIMsg
  338.  
  339.     cmp.l    #IDCMP_GADGETUP,iclass
  340.     beq    which_gadgetup
  341.  
  342.     cmp.l    #IDCMP_GADGETDOWN,iclass
  343.     beq    which_gadgetdown
  344.  
  345.     cmp.l    #IDCMP_VANILLAKEY,iclass
  346.     beq    which_vanillakey
  347.  
  348.     cmp.l    #IDCMP_RAWKEY,iclass
  349.     beq    which_rawkey
  350.  
  351.     cmp.l    #IDCMP_MOUSEBUTTONS,iclass
  352.     beq    which_mousebutton
  353.  
  354.     cmp.l    #IDCMP_MENUPICK,iclass
  355.     beq    which_menu
  356.  
  357.     cmp.l    #IDCMP_MENUHELP,iclass
  358.     beq    which_menu
  359.  
  360.     cmp.l    #IDCMP_REFRESHWINDOW,iclass
  361.     beq    refresh_window
  362.  
  363.     cmp.l    #IDCMP_INACTIVEWINDOW,iclass
  364.     beq    window_inactive
  365.  
  366.     cmp.l    #IDCMP_ACTIVEWINDOW,iclass
  367.     beq    window_active
  368.  
  369.     cmp.l    #IDCMP_CLOSEWINDOW,iclass
  370.     beq.s    clear_menustrip
  371.  
  372.     bra    mainloop
  373.  
  374.  
  375. clear_menustrip
  376.     move.l    wndwptr(pc),a0
  377.     CALLINT    ClearMenuStrip
  378.  
  379. close_window
  380.     move.l    wndwptr(pc),a0
  381.     CALLINT    CloseWindow
  382.  
  383. free_gadgets
  384.     move.l    gadlistptr(pc),a0
  385.     CALLGADTOOLS    FreeGadgets
  386.  
  387. free_menustrip
  388.     move.l    menu0ptr(pc),a0
  389.     CALLGADTOOLS    FreeMenus
  390.  
  391. free_visual
  392.     move.l    visptr(pc),a0
  393.     CALLGADTOOLS    FreeVisualInfo
  394.  
  395. unlock_pubscreen
  396.     tst.b    scrlock
  397.     bne.s    exit_closeicon
  398.     bsr    unlock_ps
  399.  
  400. exit_closeicon
  401.     move.l    _IconBase(pc),a1
  402.     CALLEXEC    CloseLibrary
  403.  
  404. exit_closeutility
  405.     move.l    _UtilityBase(pc),a1
  406.     CALLEXEC    CloseLibrary
  407.  
  408. exit_closegadtools
  409.     move.l    _GadtoolsBase(pc),a1
  410.     CALLEXEC    CloseLibrary
  411.  
  412. exit_closegfx
  413.     move.l    _GfxBase(pc),a1
  414.     CALLEXEC    CloseLibrary
  415.  
  416. exit_closeint
  417.     move.l    _IntuitionBase(pc),a1
  418.     CALLEXEC    CloseLibrary
  419.  
  420. exit_closedos
  421.     move.l    _DOSBase(pc),a1
  422.     CALLEXEC    CloseLibrary
  423.  
  424. quit
  425.     clr.b    d2
  426.     lea    npmem(pc),a5
  427.  
  428. npm_l    addq.b    #1,d2
  429.     cmp.b    #11,d2
  430.     bge.s    npm_end
  431.     move.l    (a5)+,d1
  432.     tst.l    d1
  433.     beq.s    npm_l
  434.     move.l    d1,a1
  435.     moveq    #LN_SIZE,d0
  436.     CALLEXEC    FreeMem
  437.     bra.s    npm_l
  438.  
  439. npm_end    moveq    #0,d0
  440.     rts
  441.  
  442.  
  443.  * Jump-To Routines.
  444.  
  445. which_gadgetup
  446.     move.l    iadr(pc),a0
  447.     move.w    gg_GadgetID(a0),d0
  448.     tst.b    d0
  449.     beq    do_button
  450.     cmp.b    #1,d0
  451.     beq    do_string
  452.     cmp.b    #2,d0
  453.     beq    do_tick
  454.     cmp.b    #3,d0
  455.     beq    do_cycle
  456.     cmp.b    #4,d0
  457.     beq    do_integer
  458.     cmp.b    #5,d0
  459.     beq    do_mx
  460.     cmp.b    #6,d0
  461.     beq    do_slider
  462.     cmp.b    #7,d0
  463.     beq    do_scroller
  464.     cmp.b    #8,d0
  465.     beq    do_text
  466.     cmp.b    #9,d0
  467.     beq    do_number
  468.     cmp.b    #10,d0
  469.     beq    do_listview
  470.     cmp.b    #11,d0
  471.     beq    do_readlist
  472.  
  473.     bra    mainloop
  474.  
  475. which_upid
  476.  
  477.     bra    mainloop
  478.  
  479. which_gadgetdown
  480.     move.l    iadr(pc),a0
  481.     move.w    gg_GadgetID(a0),d0
  482.     cmp.b    #5,d0
  483.     beq    do_mx
  484.  
  485.     bra    mainloop
  486.  
  487. which_downid
  488.  
  489.     bra    mainloop
  490.  
  491. which_vanillakey
  492.  
  493.     bra    mainloop
  494.  
  495. which_rawkey
  496.  
  497.     bra    mainloop
  498.  
  499. which_brownkey
  500.  
  501.     bra    mainloop
  502.  
  503. which_mousebutton
  504.  
  505.     bra    mainloop
  506.  
  507. which_menu
  508.     move.w    icode,d0
  509.     cmp.w    #$F800,d0
  510.     beq.s    do_nothing
  511.     cmp.w    #$F820,d0
  512.     beq.s    do_nothing
  513.     cmp.w    #$40,d0
  514.     beq.s    do_nothing
  515.     cmp.w    #$840,d0
  516.     beq.s    do_nothing
  517.     cmp.w    #$F860,d0
  518.     beq.s    do_nothing
  519.     cmp.w    #$F801,d0
  520.     beq.s    do_nothing
  521.     cmp.w    #$F821,d0
  522.     beq.s    do_nothing
  523.     cmp.w    #$F841,d0
  524.     beq.s    do_nothing
  525.     cmp.w    #$F861,d0
  526.     beq.s    do_nothing
  527.  
  528.     bra    mainloop
  529.  
  530. do_nothing
  531.     bra    mainloop
  532.  
  533. do_button
  534.  
  535.  * Set the slider level to 2.
  536.  
  537.     move.l    ngptr6(pc),a0
  538.     move.l    wndwptr(pc),a1
  539.     suba.l    a2,a2
  540.     lea    newtags(pc),a3
  541.     move.l    #GTSL_Level,(a3)
  542.     move.l    #2,4(a3)
  543.     move.l    #TAG_DONE,8(a3)
  544.     CALLGADTOOLS    GT_SetGadgetAttrsA
  545.  
  546.  * Activate the String Gadget.
  547.  
  548.     move.l    ngptr1(pc),a0
  549.     move.l    wndwptr(pc),a1
  550.     suba.l    a2,a2
  551.     CALLINT    ActivateGadget
  552.  
  553.     bra    mainloop
  554.  
  555. do_string
  556.     move.w    #16,d0
  557.     move.w    #26,d1
  558.     move.l    wndwrp(pc),a1
  559.     CALLGRAF Move
  560.     move.l    iadr,a0
  561.     move.l    gg_SpecialInfo(a0),a0
  562.     move.l    (a0),a0                ; si_Buffer(a0),a0
  563.     bsr    findlen
  564.     tst.l    d0
  565.     ble.s    string_toosmall
  566.     move.l    wndwrp(pc),a1
  567.     CALLGRAF    Text
  568.  
  569. string_toosmall
  570.  
  571.     bra    mainloop
  572.  
  573. do_tick
  574.     move.w    #16,d0
  575.     move.w    #26,d1
  576.     move.l    wndwrp(pc),a1
  577.     CALLGRAF Move
  578.     addq.b    #1,tick
  579.     tst.b    tick
  580.     beq.s    tick_off
  581.     cmp.b    #1,tick
  582.     beq.s    tick_on
  583.     clr.b    tick
  584.  
  585. tick_off
  586.     lea    offstg(pc),a0
  587.     moveq    #4,d0
  588.     move.l    wndwrp(pc),a1
  589.     CALLGRAF    Text
  590.     bra.s    tick_end
  591.  
  592. tick_on
  593.     lea    onstg(pc),a0
  594.     moveq    #4,d0
  595.     move.l    wndwrp(pc),a1
  596.     CALLGRAF    Text
  597.  
  598. tick_end
  599.  
  600.     bra    mainloop
  601.  
  602. do_cycle
  603.     move.w    #16,d0
  604.     move.w    #26,d1
  605.     move.l    wndwrp(pc),a1
  606.     CALLGRAF Move
  607.  
  608.  * Detach the List from the ListView.
  609.  
  610.     move.l    ngptr11(pc),a0
  611.     move.l    wndwptr(pc),a1
  612.     suba.l    a2,a2
  613.     lea    newtags(pc),a3
  614.     move.l    #GTLV_Labels,(a3)
  615.     clr.l    4(a3)
  616.     move.l    #TAG_DONE,8(a3)
  617.     CALLGADTOOLS    GT_SetGadgetAttrsA
  618.  
  619.  * Add a new Node to the end of the list.
  620.  
  621.     addq.b    #1,cnt
  622.     cmp.b    #11,cnt
  623.     bge.s    node_end
  624.     moveq    #LN_SIZE,d0
  625.     move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  626.     CALLEXEC    AllocMem
  627.     move.l    d0,nodeptr
  628.     beq.s    no_node
  629.     move.l    d0,(a5)+
  630.     lea    list0,a0
  631.     move.l    nodeptr(pc),a1
  632.     lea    nnstg,a2
  633.     clr.l    (a1)                    ; LN_SUCC(a1)
  634.     clr.l    LN_PRED(a1)
  635.     move.b    #NT_UNKNOWN,LN_TYPE(a1)
  636.     move.b    #0,LN_PRI(a1)
  637.     move.l    a2,LN_NAME(a1)
  638.     CALLEXEC    AddTail
  639.  
  640. no_node
  641.  
  642. node_end
  643.  
  644.  
  645.  * Re-attach the List to the ListView.
  646.  
  647.     move.l    ngptr11(pc),a0
  648.     move.l    wndwptr(pc),a1
  649.     suba.l    a2,a2
  650.     lea    newtags(pc),a3
  651.     lea    list0(pc),a4
  652.     move.l    #GTLV_Labels,(a3)
  653.     move.l    a4,4(a3)
  654.     move.l    #GTLV_Selected,8(a3)
  655.     move.l    #3,12(a3)
  656.     move.l    #TAG_DONE,16(a3)
  657.     CALLGADTOOLS    GT_SetGadgetAttrsA
  658.  
  659.     bra    mainloop
  660.  
  661. do_integer
  662.     move.w    #16,d0
  663.     move.w    #26,d1
  664.     move.l    wndwrp(pc),a1
  665.     CALLGRAF Move
  666.     move.l    iadr,a0
  667.     move.l    gg_SpecialInfo(a0),a0
  668.     move.l    (a0),a0                    ; si_Buffer(a0),a0
  669.     bsr    findlen
  670.     tst.l    d0
  671.     ble.s    number_toosmall
  672.     move.l    wndwrp(pc),a1
  673.     CALLGRAF    Text
  674.  
  675. number_toosmall
  676.  
  677.     bra    mainloop
  678.  
  679. do_mx
  680.     move.w    #16,d0
  681.     move.w    #26,d1
  682.     move.l    wndwrp(pc),a1
  683.     CALLGRAF Move
  684.     move.w    icode(pc),d0
  685.     tst.b    d0
  686.     beq.s    mx0
  687.     cmp.b    #1,d0
  688.     beq.s    mx1
  689.     cmp.b    #2,d0
  690.     beq.s    mx2
  691.     bra.s    mx_end
  692.  
  693. mx0
  694.     lea    zerostg(pc),a0
  695.     moveq    #4,d0
  696.     move.l    wndwrp(pc),a1
  697.     CALLGRAF    Text
  698.     bra.s    mx_end
  699.  
  700. mx1
  701.     lea    onestg(pc),a0
  702.     moveq    #4,d0
  703.     move.l    wndwrp(pc),a1
  704.     CALLGRAF    Text
  705.     bra.s    mx_end
  706.  
  707. mx2
  708.     lea    twostg(pc),a0
  709.     moveq    #4,d0
  710.     move.l    wndwrp(pc),a1
  711.     CALLGRAF    Text
  712.  
  713. mx_end
  714.  
  715.     bra    mainloop
  716.  
  717. do_slider
  718.  
  719.     bra    mainloop
  720.  
  721. do_scroller
  722.  
  723.     bra    mainloop
  724.  
  725. do_text
  726.  
  727.     bra    mainloop
  728.  
  729. do_number
  730.  
  731.     bra    mainloop
  732.  
  733. do_palette
  734.  
  735.     bra    mainloop
  736.  
  737. do_listview
  738.  
  739.     bra    mainloop
  740.  
  741. do_readlist
  742.  
  743.     bra    mainloop
  744.  
  745. refresh_window
  746.     bsr.s    begin_refresh
  747.  
  748.     bsr.s    end_refresh
  749.  
  750.     bra    mainloop
  751.  
  752. window_inactive
  753.  
  754.     bra    mainloop
  755.  
  756. window_active
  757.  
  758.     bra    mainloop
  759.  
  760.  
  761.  * Sub-Routines.
  762.  
  763. unlock_ps
  764.     suba.l    a0,a0
  765.     move.l    scrnptr(pc),a1
  766.     CALLINT    UnlockPubScreen
  767.     rts
  768.  
  769. begin_refresh:
  770.     move.l    wndwptr(pc),a0
  771.     CALLGADTOOLS    GT_BeginRefresh
  772.     rts
  773.  
  774. end_refresh:
  775.     move.l    wndwptr(pc),a0
  776.     moveq    #-1,d0
  777.     CALLGADTOOLS    GT_EndRefresh
  778.     rts
  779.  
  780. findlen    move.l    a0,a1
  781.     moveq    #0,d0
  782. not_nil    tst.b    (a1)+
  783.     beq.s    gotlen
  784.     addq.l    #1,d0
  785.     bra.s    not_nil
  786. gotlen    rts
  787.  
  788.  
  789.  * Structure Definitions.
  790.  
  791. font_name
  792.     dc.b    'topaz.font',0
  793.     even
  794.  
  795. topaz9
  796.     dc.l    font_name
  797.     dc.w    9
  798.     dc.b    FS_NORMAL,FPF_ROMFONT
  799.  
  800. menu0defs
  801.     dc.b    NM_TITLE,0
  802.     dc.l    mmstg0,0
  803.     dc.w    0
  804.     dc.l    0,0
  805.  
  806.     dc.b    NM_ITEM,0
  807.     dc.l    mistg0,lkey
  808.     dc.w    0
  809.     dc.l    0,0
  810.  
  811.     dc.b    NM_ITEM,0
  812.     dc.l    mistg1,skey
  813.     dc.w    0
  814.     dc.l    0,0
  815.  
  816.     dc.b    NM_ITEM,0
  817.     dc.l    NM_BARLABEL,0
  818.     dc.w    0
  819.     dc.l    0,0
  820.  
  821.     dc.b    NM_ITEM,0
  822.     dc.l    mistg2,0
  823.     dc.w    0
  824.     dc.l    0,0
  825.  
  826.     dc.b    NM_SUB,0
  827.     dc.l    sistg0,akey
  828.     dc.w    0
  829.     dc.l    0,0
  830.  
  831.     dc.b    NM_SUB,0
  832.     dc.l    sistg1,pkey
  833.     dc.w    0
  834.     dc.l    0,0
  835.  
  836.     dc.b    NM_ITEM,0
  837.     dc.l    NM_BARLABEL,0
  838.     dc.w    0
  839.     dc.l    0,0
  840.  
  841.     dc.b    NM_ITEM,0
  842.     dc.l    mistg3,qkey
  843.     dc.w    0
  844.     dc.l    0,0
  845.  
  846.     dc.b    NM_END,0
  847.     dc.l    0,0
  848.     dc.w    0
  849.     dc.l    0,0
  850.  
  851. menu0tags
  852.     dc.l    GTMN_TextAttr,topaz9
  853.     dc.l    TAG_DONE
  854.  
  855. wndwtags
  856.     dc.l    WA_Top,0
  857.     dc.l    WA_Left,0
  858.     dc.l    WA_Width,640
  859.     dc.l    WA_Height,256
  860.     dc.l    WA_DetailPen,0
  861.     dc.l    WA_BlockPen,1
  862.     dc.l    WA_IDCMP,IDCMP_GADGETUP!IDCMP_GADGETDOWN!IDCMP_VANILLAKEY!IDCMP_RAWKEY!IDCMP_MOUSEBUTTONS!IDCMP_MENUPICK!IDCMP_MENUHELP!IDCMP_REFRESHWINDOW!IDCMP_CLOSEWINDOW!IDCMP_INTUITICKS!IDCMP_MOUSEMOVE
  863.     dc.l    WA_Title,wndw_title
  864.     dc.l    WA_Gadgets
  865. gadlistptr
  866.     dc.l    0
  867.     dc.l    WA_Activate,TRUE
  868.     dc.l    WA_CloseGadget,TRUE
  869.     dc.l    WA_DepthGadget,TRUE
  870.     dc.l    WA_DragBar,TRUE
  871.     dc.l    WA_SizeGadget,TRUE
  872.     dc.l    WA_NoCareRefresh,TRUE
  873.     dc.l    WA_SmartRefresh,TRUE
  874.     dc.l    WA_MenuHelp,TRUE
  875.     dc.l    WA_PubScreen
  876. wndwscrn
  877.     dc.l    0
  878.     dc.l    TAG_DONE
  879.  
  880.  
  881.  * Long Variables.
  882.  
  883. _IntuitionBase    dc.l    0
  884. _GfxBase    dc.l    0
  885. _DOSBase    dc.l    0
  886. _IconBase    dc.l    0
  887. _UtilityBase    dc.l    0
  888. _GadtoolsBase    dc.l    0
  889. scrnptr        dc.l    0
  890. vpptr        dc.l    0
  891. wndwptr        dc.l    0
  892. wndwrp        dc.l    0
  893. iclass        dc.l    0
  894. iadr        dc.l    0
  895. visptr        dc.l    0
  896. nodeptr        dc.l    0
  897. menu0ptr    dc.l    0
  898.  
  899.  
  900.  * Word Variables.
  901.  
  902. icode        dc.w    0
  903. iqual        dc.w    0
  904. msex        dc.w    0
  905. msey        dc.w    0
  906.  
  907.  
  908.  * Byte Variables.
  909.  
  910. tick        dc.b    1
  911. cnt        dc.b    0
  912. scrlock        dc.b    0
  913.  
  914.  
  915.  * String Variables.
  916.  
  917. int_name    dc.b    'intuition.library',0
  918. dos_name    dc.b    'dos.library',0
  919. icon_name       dc.b    'icon.library',0,0
  920. gfx_name    dc.b    'graphics.library',0
  921. utility_name    dc.b    'utility.library',0
  922. gadtools_name    dc.b    'gadtools.library',0,0
  923. asl_name    dc.b    'asl.library',0
  924. wndw_title    dc.b    'GadTools.s',0,0
  925. offstg        dc.b    'Off ',0,0
  926. onstg        dc.b    'On  ',0,0
  927. zerostg        dc.b    'Zero',0,0
  928. onestg        dc.b    'One ',0,0
  929. twostg        dc.b    'Two ',0,0
  930. nstg0        dc.b    'Morning',0
  931. nstg1        dc.b    'Afternoon',0
  932. nstg2        dc.b    'Evening',0
  933. nstg3        dc.b    'Zero',0,0
  934. nstg4        dc.b    'One',0
  935. nstg5        dc.b    'Two',0
  936. daytime0    dc.b    'Afternoon',0
  937. nnstg        dc.b    'I Am A New Node',0
  938. mmstg0        dc.b    'PROJECT',0
  939. mistg0        dc.b    'Load',0,0
  940. mistg1        dc.b    'Save',0,0
  941. mistg2        dc.b    'About',0
  942. sistg0        dc.b    'This Program',0,0
  943. sistg1        dc.b    'John White',0,0
  944. mistg3        dc.b    'Quit',0,0
  945. lkey        dc.b    'L',0
  946. skey        dc.b    'S',0
  947. akey        dc.b    'A',0
  948. pkey        dc.b    'P',0
  949. qkey        dc.b    'Q',0
  950.  
  951.  
  952.  * Buffer Variables.
  953.  
  954. list0        dcb.b    LH_SIZE
  955. node0        dcb.b    LN_SIZE
  956. node1        dcb.b    LN_SIZE
  957. node2        dcb.b    LN_SIZE
  958. list1        dcb.b    LH_SIZE
  959. node3        dcb.b    LN_SIZE
  960. node4        dcb.b    LN_SIZE
  961. node5        dcb.b    LN_SIZE
  962. newnode        dcb.b    LN_SIZE
  963. newtags        dcb.b    40
  964. npmem        dcb.b    40
  965.  
  966.  
  967.  * GadTool Definitions.
  968.  
  969. ngdefs0
  970.     dc.w    116,26,100,14
  971.     dc.l    ngtxt0,topaz9
  972.     dc.w    0
  973.     dc.l    PLACETEXT_IN!NG_HIGHLABEL,0
  974.     dc.l    0
  975.  
  976. ngptr0    dc.l    0
  977. ngtxt0
  978.     dc.b    '_Button',0
  979.     even
  980.  
  981. ngtags0
  982.     dc.l    GT_Underscore,$0000005F
  983.     dc.l    TAG_DONE
  984.  
  985. ngdefs1
  986.     dc.w    116,46,100,14
  987.     dc.l    ngtxt1,topaz9
  988.     dc.w    1
  989.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  990.     dc.l    0
  991.  
  992. ngptr1    dc.l    0
  993. ngtxt1
  994.     dc.b    '_String',0
  995.     even
  996.  
  997. ngtags1
  998.     dc.l    GTST_String,ngstg1
  999.     dc.l    GTST_MaxChars,50
  1000.     dc.l    GT_Underscore,$0000005F
  1001.     dc.l    TAG_DONE
  1002.  
  1003. ngstg1
  1004.     dc.b    'Hello',0
  1005.     even
  1006.  
  1007. ngdefs2
  1008.     dc.w    116,66,24,14
  1009.     dc.l    ngtxt2,topaz9
  1010.     dc.w    2
  1011.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1012.     dc.l    0
  1013.  
  1014. ngptr2    dc.l    0
  1015. ngtxt2
  1016.     dc.b    '_Tick',0
  1017.     even
  1018.  
  1019. ngtags2
  1020.     dc.l    GTCB_Checked,TRUE
  1021.     dc.l    GT_Underscore,$0000005F
  1022.     dc.l    TAG_DONE
  1023.  
  1024. ngdefs3
  1025.     dc.w    116,90,124,14
  1026.     dc.l    ngtxt3,topaz9
  1027.     dc.w    3
  1028.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1029.     dc.l    0
  1030.  
  1031. ngptr3    dc.l    0
  1032. ngtxt3
  1033.     dc.b    '_Cycle',0
  1034.     even
  1035.  
  1036. ngtags3
  1037.     dc.l    GTCY_Active,0
  1038.     dc.l    GTCY_Labels,cyl_labels
  1039.     dc.l    GT_Underscore,$0000005F
  1040.     dc.l    TAG_DONE
  1041.  
  1042. cl0    dc.b    'Morning',0
  1043. cl1    dc.b    'Afternoon',0
  1044. cl2    dc.b    'Evening',0
  1045.  
  1046. cyl_labels    dc.l    cl0,cl1,cl2,0
  1047.  
  1048. ngdefs4
  1049.     dc.w    116,116,124,14
  1050.     dc.l    ngtxt4,topaz9
  1051.     dc.w    4
  1052.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1053.     dc.l    0
  1054.  
  1055. ngptr4    dc.l    0
  1056. ngtxt4
  1057.     dc.b    '_Integer',0
  1058.     even
  1059.  
  1060. ngtags4
  1061.     dc.l    GTIN_Number,100
  1062.     dc.l    GTIN_MaxChars,4
  1063.     dc.l    GT_Underscore,$0000005F
  1064.     dc.l    TAG_DONE
  1065.  
  1066. ngdefs5
  1067.     dc.w    336,24,MX_WIDTH,MX_HEIGHT
  1068.     dc.l    ngtxt5,topaz9
  1069.     dc.w    5
  1070.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1071.     dc.l    0
  1072.  
  1073. ngptr5    dc.l    0
  1074. ngtxt5
  1075.     dc.b    '_MX',0
  1076.     even
  1077.  
  1078. ngtags5
  1079.     dc.l    GTMX_Active,0
  1080.     dc.l    GTMX_Labels,mx_labels
  1081.     dc.l    GTMX_Spacing,12
  1082.     dc.l    GT_Underscore,$0000005F
  1083.     dc.l    TAG_DONE
  1084.  
  1085. mx0stg    dc.b    'Top',0
  1086. mx1stg    dc.b    'Middle',0
  1087. mx2stg    dc.b    'Bottom',0
  1088.  
  1089. mx_labels    dc.l    mx0stg,mx1stg,mx2stg,0
  1090.  
  1091. ngdefs6
  1092.     dc.w    336,84,124,14
  1093.     dc.l    ngtxt6,topaz9
  1094.     dc.w    6
  1095.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1096.     dc.l    0
  1097.  
  1098. ngptr6    dc.l    0
  1099. ngtxt6
  1100.     dc.b    '_Slider',0
  1101.     even
  1102.  
  1103. ngtags6
  1104.     dc.l    GTSL_Min,0
  1105.     dc.l    GTSL_Max,15
  1106.     dc.l    GTSL_Level,12
  1107.     dc.l    GTSL_MaxLevelLen,2
  1108.     dc.l    GTSL_MaxPixelLen,20
  1109.     dc.l    GTSL_LevelPlace,PLACETEXT_RIGHT
  1110.     dc.l    GTSL_LevelFormat,slfstg
  1111.     dc.l    GT_Underscore,$0000005F
  1112.     dc.l    TAG_DONE
  1113.  
  1114. slfstg
  1115.     dc.b    '%2ld',0
  1116.     even
  1117.  
  1118. ngdefs7
  1119.     dc.w    336,104,200,14
  1120.     dc.l    ngtxt7,topaz9
  1121.     dc.w    7
  1122.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1123.     dc.l    0
  1124.  
  1125. ngptr7    dc.l    0
  1126. ngtxt7
  1127.     dc.b    '_Scroller',0
  1128.     even
  1129.  
  1130. ngtags7
  1131.     dc.l    GTSC_Arrows,16
  1132.     dc.l    GTSC_Top,0
  1133.     dc.l    GTSC_Total,10
  1134.     dc.l    GTSC_Visible,2
  1135.     dc.l    GT_Underscore,$0000005F
  1136.     dc.l    TAG_DONE
  1137.  
  1138. ngdefs8
  1139.     dc.w    336,124,200,14
  1140.     dc.l    ngtxt8,topaz9
  1141.     dc.w    8
  1142.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1143.     dc.l    0
  1144.  
  1145. ngptr8    dc.l    0
  1146. ngtxt8
  1147.     dc.b    '_Text',0
  1148.     even
  1149.  
  1150. ngtags8
  1151.     dc.l    GTTX_Text,ngstg8
  1152.     dc.l    GTTX_FrontPen,2
  1153.     dc.l    GTTX_BackPen,1
  1154.     dc.l    GTTX_Border,TRUE
  1155.     dc.l    GT_Underscore,$0000005F
  1156.     dc.l    TAG_DONE
  1157.  
  1158. ngstg8
  1159.     dc.b    'Hello',0
  1160.     even
  1161.  
  1162. ngdefs9
  1163.     dc.w    336,144,200,14
  1164.     dc.l    ngtxt9,topaz9
  1165.     dc.w    9
  1166.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1167.     dc.l    0
  1168.  
  1169. ngptr9    dc.l    0
  1170. ngtxt9
  1171.     dc.b    '_Number',0
  1172.     even
  1173.  
  1174. ngtags9
  1175.     dc.l    GTNM_Number,1234
  1176.     dc.l    GTNM_MaxNumberLen,4
  1177.     dc.l    GTNM_Format,nmfstg9
  1178.     dc.l    GTNM_FrontPen,2
  1179.     dc.l    GTNM_BackPen,1
  1180.     dc.l    GTNM_Border,TRUE
  1181.     dc.l    GT_Underscore,$0000005F
  1182.     dc.l    TAG_DONE
  1183.  
  1184. nmfstg9
  1185.     dc.b    '%2ld',0
  1186.     even
  1187.  
  1188. ngdefs10
  1189.     dc.w    336,164,200,14
  1190.     dc.l    ngtxt10,topaz9
  1191.     dc.w    10
  1192.     dc.l    PLACETEXT_LEFT!NG_HIGHLABEL,0
  1193.     dc.l    0
  1194.  
  1195. ngptr10    dc.l    0
  1196. ngtxt10
  1197.     dc.b    '_Palette',0
  1198.     even
  1199.  
  1200. ngtags10
  1201.     dc.l    GTPA_Color,0
  1202.     dc.l    GTPA_IndicatorHeight,0
  1203.     dc.l    GTPA_IndicatorWidth,24
  1204.     dc.l    GTPA_Depth,2
  1205.     dc.l    GTPA_NumColors,4
  1206.     dc.l    GT_Underscore,$0000005F
  1207.     dc.l    TAG_DONE
  1208.  
  1209. ngdefs11
  1210.     dc.w    16,160,180,60
  1211.     dc.l    ngtxt11,topaz9
  1212.     dc.w    11
  1213.     dc.l    PLACETEXT_ABOVE!NG_HIGHLABEL,0
  1214.     dc.l    0
  1215.  
  1216. ngptr11    dc.l    0
  1217. ngtxt11
  1218.     dc.b    '_Selectable ListView',0
  1219.     even
  1220.  
  1221. ngtags11
  1222.     dc.l    GTLV_Top,0
  1223.     dc.l    GTLV_ScrollWidth,24
  1224.     dc.l    GTLV_Selected,1
  1225.     dc.l    GTLV_ShowSelected,0
  1226.     dc.l    GTLV_Labels,list0
  1227.     dc.l    GT_Underscore,$0000005F
  1228.     dc.l    TAG_DONE
  1229.  
  1230. ngdefs12
  1231.     dc.w    400,200,180,40
  1232.     dc.l    ngtxt12,topaz9
  1233.     dc.w    12
  1234.     dc.l    PLACETEXT_ABOVE!NG_HIGHLABEL,0
  1235.     dc.l    0
  1236.  
  1237. ngptr12    dc.l    0
  1238. ngtxt12
  1239.     dc.b    '_READ ONLY ListView',0
  1240.     even
  1241.  
  1242. ngtags12
  1243.     dc.l    GTLV_Top,0
  1244.     dc.l    GTLV_ScrollWidth,24
  1245.     dc.l    GTLV_Selected,2
  1246.     dc.l    GTLV_Labels,list1
  1247.     dc.l    GTLV_ReadOnly,TRUE
  1248.     dc.l    GT_Underscore,$0000005F
  1249.     dc.l    TAG_DONE
  1250.  
  1251. box0tags
  1252.     dc.l    GT_VisualInfo
  1253. box0vis
  1254.     dc.l    0
  1255.     dc.l    GTBB_Recessed,TRUE
  1256.     dc.l    TAG_DONE
  1257.  
  1258.  
  1259.     SECTION    VERSION,DATA
  1260.  
  1261.     dc.b    '$VER: Gadtools.s V1.01 (22.4.2001)',0
  1262.  
  1263.  
  1264.     END